package com.zmn.mcc.permit.mysql.enums;

import com.zmn.mcc.common.enums.DpermitEnum;

import java.util.Comparator;

/**
 * 数据权限拦截类型
 *
 * @author duanzuocai
 * @version v1.0
 * @since 2020/6/19 15:29
 */
public enum DPermitTypeEnum implements Comparator<DPermitTypeEnum> {

    /** 组织架构：平台 */
    ORG_ONE("plat", DpermitEnum.ORGANIZE_PLAT),

    /** 组织架构：大区 */
    ORG_TWO("org_two_Id", DpermitEnum.ORGANIZE_REGION),

    /** 组织架构：子公司 */
    ORG_THR("org_thr_Id", DpermitEnum.ORGANIZE_SUB),

    /** 服务公司 */
    COMP_SP("company_id", DpermitEnum.ORGANIZE_SP),

    /** 一级部门 */
    DEPT_1("dept_one_id", DpermitEnum.DEPT_L1),

    /** 二级部门 */
    DEPT_2("dept_two_id", DpermitEnum.DEPT_L2),

    /** 三级部门 */
    DEPT_3("dept_thr_id", DpermitEnum.DEPT_L3),

    /** 省 */
    PROVINCE("province_id", DpermitEnum.AREA_PROVINCE),

    /** 市 */
    CITY("city_id", DpermitEnum.AREA_CITY),

    /** 区/县 */
    COUNTY("county_id", DpermitEnum.AREA_COUNTY),

    /** 下单平台 */
    COOPERATION_PLAT("plat", DpermitEnum.COOPERATION_PLAT),

    /** 一级合作 */
    COOPERATION_ONE("channel_one_id", DpermitEnum.COOPERATION_ONE),

    /** 二级合作：有的地方使用“channel_two_id”，此时可以使用自定义 */
    COOPERATION_TWO("channel_id", DpermitEnum.COOPERATION_TWO);
//
//    /** 服务分类 */
//    SERV("serv_categ_id", DpermitConsts.TYPE_CATEGORY_SEVR),
//
//    /** 产品一级分类 */
//    PROD1("categ_one_id", DpermitConsts.TYPE_CATEGORY_PROD1),
//
//    /** 产品二级分类 */
//    PROD2("categ_id", DpermitConsts.TYPE_CATEGORY_PROD2);

    /** 表名 */
    private String column;
    /** 数据权限类型 */
    private final DpermitEnum type;

    DPermitTypeEnum(String column, DpermitEnum typeEnum) {
        this.column = column;
        this.type = typeEnum;
    }

    public int getTopType() {
        return type.getType();
    }

    /**
     * 根据类型获取字段：先查询mapping，再查types
     *
     * @param type
     * @return
     */
    public static String getColumnByType(int type) {
        for (DPermitTypeEnum typeEnum : values()) {
            if (typeEnum.getType().getValue() == type) {
                return typeEnum.getColumn();
            }
        }

        return null;
    }

    /**
     * 根据类型获取枚举
     *
     * @param type
     * @return
     */
    public static DPermitTypeEnum getTypeEnumByType(int type) {
        for (DPermitTypeEnum typeEnum : values()) {
            if (typeEnum.getType().getValue() == type) {
                return typeEnum;
            }
        }

        return null;
    }

    /**
     * 根据类型获取枚举
     *
     * @param column
     * @return
     */
    public static DPermitTypeEnum getTypeEnumByColumn(String column) {
        for (DPermitTypeEnum typeEnum : values()) {
            if (typeEnum.getColumn().equals(column)) {
                return typeEnum;
            }
        }

        return null;
    }

    public static Integer getLevel(int type) {
        for (DPermitTypeEnum typeEnum : values()) {
            if (typeEnum.getType().getValue() == type) {
                return typeEnum.getType().getLevel();
            }
        }

        return null;
    }

    public String getColumn() {
        return column;
    }

    public void setColumn(String column) {
        this.column = column;
    }

    public int getDPermitType() {
        return type.getValue();
    }

    public DpermitEnum getType() {
        return type;
    }

    public void set(String column) {
        this.column = column;
    }

    @Override
    public int compare(DPermitTypeEnum o1, DPermitTypeEnum o2) {
        return o1.getType().getValue() - o2.getType().getValue();
    }
}
